const Compiler = require('./Compiler')
const NodeEnvironmentPlugin = require('./node/NodeEnvironmentPlugin')
const WebpackOptionsApply = require('./WebpackOptionsApply')

function webpack (options) {
  // 01. 实例化 compiler 对象 （它会贯穿整个webpack工作的过程）
  const compiler = new Compiler(options.context)
  compiler.options = options

  // 02. 初始化 NodeEnvironmentPlugin(让 compiler 具有读写能力)
  new NodeEnvironmentPlugin().apply(compiler)

  // 03. 挂载所有 plugins 插件至 compiler 对象上
  if (options.plugins && Array.isArray(options.plugins)) {
    for (const plugin of options.plugins) {
      plugin.apply(compiler)
    }
  }

  // 04. 挂载所有 webpack 内置的插件
  new WebpackOptionsApply().process(options, compiler)

  // 05. 返回 compiler 对象即可
  return compiler
}

module.exports = webpack
